/*
 * Archivo.java
 *
 * Created on 15 de abril de 2007, 04:47 AM
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */
package administrador;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.math.RoundingMode;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Scanner;
import java.util.Vector;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author daniel1
 */
public class Archivo {

    File file;
    Conexion conexion;
    //Nath RedondeoF
    NumberFormat nf = NumberFormat.getNumberInstance();

    /** Creates a new instance of Archivo */
    public Archivo() {
        //conectar();

        //Configuro Redondeo
        nf.setMaximumFractionDigits(2);
        nf.setRoundingMode(RoundingMode.HALF_UP);
        DecimalFormat dec = (DecimalFormat) nf;
        dec.applyPattern("###");
    }
    
    public Archivo(String pathArchivo){
        //Configuro Redondeo
        nf.setMaximumFractionDigits(2);
        nf.setRoundingMode(RoundingMode.HALF_UP);
        DecimalFormat dec = (DecimalFormat) nf;
        dec.applyPattern("###");
        
        //Asigno Archivo
        file = new File(pathArchivo);
        
    }

    public void crearArchivo(String nombreArch) {
        try {
            //Borro el Archivo Existente:
            (new File(nombreArch)).delete();

            //Creo el archivo:
            file = new File(nombreArch);

            // Create file if it does not exist
            file.createNewFile();

        } catch (IOException e) {
            System.err.println(e);
        }

    }

    public File sacoFile() {
        return file;
    }

    public void escriboLineaArchivo(String nombreArch, String linea) {
        try {
            BufferedWriter out = new BufferedWriter(new FileWriter(nombreArch, true));
            out.write(linea + "\n");
            out.close();
        } catch (IOException e) {
            System.err.println(e);
        }
    }

    public void removeLineFromFile(String file, String lineToRemove, String sustituto) {
       //System.out.println("Los parametros de entrada a la Impresion son::" + file + lineToRemove + " " + sustituto);
        try {

            File inFile = new File(file);

            if (!inFile.isFile()) {
                System.err.println("El Archivo de .txt que desea abrir no existe");
                return;
            }

            //Construct the new file that will later be renamed to the original filename. 
            File tempFile = new File(inFile.getAbsolutePath() + ".tmp");

            BufferedReader br = new BufferedReader(new FileReader(file));
            BufferedWriter out = new BufferedWriter(new FileWriter(tempFile));



            String line;
            while ((line = br.readLine()) != null) {

                if (!line.equals(lineToRemove)) {
                    line = line + "\n";
                    out.write(line);


                } else {
                    out.write(sustituto + "\n");
                }

            }
            out.close();
            br.close();

            //Delete the original file
            if (!inFile.delete()) {
               //System.out.println("Could not delete file");
                return;
            }

            //Rename the new file to the filename the original file had.
            if (!tempFile.renameTo(inFile)) {
               //System.out.println("Could not rename file");
            }

        } catch (FileNotFoundException ex) {
            ex.printStackTrace();
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }

    public void borrarArchivo(File archivo) {
        archivo.delete();
    }

    //"facturas/"+"Factura_"+numFact+".txt"
    public Vector LeoArchivo(String nombreArchivo) {
        Vector textoArchivo = new Vector();
        int contador = 0;
        try {
            BufferedReader in = new BufferedReader(new FileReader(nombreArchivo));
            String line;
            while ((line = in.readLine()) != null) {
                line = line + "\n";
                textoArchivo.add(line);
                contador++;
            }
            in.close();
        } catch (IOException e) {
        }
        return textoArchivo;
    }

    //Saco los Archivos del Directorio
    public static void main(String[] args) {
        Archivo a = new Archivo();

        File folder = new File("c:/facturas/");
        File[] listOfFiles = folder.listFiles();
        int numArchivo = 0;
        int contadorFacturas = 0;
        int contFacturasReales = 0;

        for (int i = 0; i < listOfFiles.length; i++) {
            //Recorro todos los archivos
            if (listOfFiles[i].isFile()) {


                //Cargo las Facturas:
                String datos[] = listOfFiles[i].getName().split("_");
                String tipoAr = datos[0];
                String numAr = datos[1].substring(0, datos[1].length() - 4);

                if (tipoAr.equals("Factura")) {
                   //System.out.println("File " + listOfFiles[i].getName());
                    contFacturasReales++;
                    //Abro el archivo y leo el contenido
                    File documentoAr = listOfFiles[i];

                    //Numero de Archivo
                    numArchivo++;

                    //Leo las lineas del Archivo:
                    File archivo = null;
                    FileReader fr = null;
                    BufferedReader br = null;

                    try {
                        // Apertura del fichero y creacion de BufferedReader para poder
                        // hacer una lectura comoda (disponer del metodo readLine()).
                        archivo = listOfFiles[i];
                        fr = new FileReader(archivo);
                        br = new BufferedReader(fr);

                        // Lectura del fichero
                        String linea;
                        boolean secprod = false;
                        boolean secsub = false;

                        int numeroLinea = 0;
                        int NumFact = 0;

                        boolean exitoCod = false;
                        boolean exitoUser = false;

                        String codigoUsuario = "";

                        //Detalle 
                        List<String> vetorDetalleProductos = new ArrayList<String>();

                        //Fecha:
                        String fecha = "";
                        boolean bandera = true;


                        //Leo las lineas de el archivo
                        while ((linea = br.readLine()) != null) {
                            String lineac = linea;
                            if (lineac.replaceAll(" ", "").equals("")) {
                            } else {
                                numeroLinea++;
                               //System.out.println(linea);

                                //Saco el codigo de la factura y el usuario:
                                String datosComprobacion = linea.replaceAll(" ", "");

                                if (numeroLinea == 7 || numeroLinea == 5 || numeroLinea == 2) {
                                    try {
                                        if (datosComprobacion.substring(0, 4).equals("No.:")) {
                                            String daC = datosComprobacion.substring(3, datosComprobacion.length());
                                            String dataV[] = daC.split("-");
                                            NumFact = Integer.valueOf(dataV[2]);
                                            exitoCod = true;
                                        }
                                    } catch (Exception e) {
                                    }
                                }

                                //Saco el nombre de Usuario:


                                datosComprobacion = linea.replaceAll(" ", "");

                                if (numeroLinea == 8 || numeroLinea == 6) {
                                    try {
                                        if (datosComprobacion.substring(0, 4).equals("Nom:")) {
                                            String daC = datosComprobacion.substring(4, datosComprobacion.length());
                                            if (daC.equals("NombreApellido")) {
                                                codigoUsuario = "1";
                                                exitoUser = true;
                                            }
                                        }

                                    } catch (Exception e) {
                                        try {
                                            if (datosComprobacion.substring(0, 4).equals("Nom:")) {
                                                String daC = datosComprobacion;
                                                String dataV[] = daC.split(":");
                                                String nombre = dataV[1];
                                                if (nombre.equals("NombreApellido")) {
                                                    codigoUsuario = "1";
                                                    exitoUser = true;
                                                }




                                            }
                                        } catch (Exception ex) {
                                        }
                                    }
                                }

                                //Saco la Fecha:
                                if (numeroLinea == 9 || numeroLinea == 11) {
                                    String dc[] = linea.split(" ");
                                    try {
                                        if (dc[1].equals("de") && dc[3].equals("de")) {
                                            int dia = Integer.valueOf(dc[0]);
                                            int mes = a.tomarMes(dc[2]);
                                            int ano = Integer.valueOf(dc[4]);
                                            fecha = ano + "-" + mes + "-" + dia;

                                        }

                                    } catch (Exception e) {
                                    }
                                }

                                if (exitoCod && exitoUser && bandera) {
                                    contadorFacturas++;
                                    bandera = false;
                                }


                                if (exitoCod && exitoUser) {



                                    String datosLinea[] = linea.split(" ");
                                    //Saco las lineas de productos:
                                    try {
                                        if (datosLinea[0].equals("Item") && !secprod) {
                                            linea = br.readLine();
                                            linea = br.readLine();
                                            secprod = true;
                                           //System.out.println(linea);
                                            
                                            boolean banderadetalle=true;
                                            while (banderadetalle) {
                                                
                                                if(linea.substring(0, 3).equals("===")){
                                                datosLinea = linea.split(" ");
                                                break;
                                                }
                                                
                                                String datosLineaDet[] = linea.split(" ");
                                                String codigoProducto = datosLineaDet[0];
                                                double subtotal = Double.parseDouble(datosLineaDet[datosLineaDet.length - 1]);
                                                double valPrecio = Double.parseDouble(datosLineaDet[datosLineaDet.length - 3]);

                                                String descripProducto = "";
                                                //Saco la descripcion:
                                                for (int n = 1; n < (datosLineaDet.length - 4); n++) {
                                                    descripProducto = descripProducto + datosLineaDet[n] + " ";
                                                }

                                                datosLinea = datosLineaDet[2].split(" ");

                                                //     Integer.valueOf
//                                            double subtotal = Double.valueOf(datosLineaDet[4].replaceAll(" ", ""));
//                                            double valPrecio = Double.valueOf(datosLineaDet[2].replaceAll(" ", ""));
                                                String cant = String.valueOf(a.nf.format(subtotal / valPrecio));

                                                vetorDetalleProductos.add(codigoProducto + "#" + descripProducto + "#" + cant + "#" + valPrecio + "#" + subtotal);

                                               //System.out.println(subtotal + " " + valPrecio + " " + cant);
                                                linea = br.readLine();
                                            }

                                        }
                                        if (datosLinea[0].substring(0, 3).equals("===") && secprod) {
                                           //System.out.println(linea);
                                            linea = br.readLine();
                                            String datosLineaTot[] = linea.replaceAll(" ", "").split("=");
                                            double subtFact = Double.parseDouble(datosLineaTot[1]);
                                           //System.out.println(linea);
                                            linea = br.readLine();
                                            datosLineaTot = linea.replaceAll(" ", "").split("=");
                                            double descuentoFact = Double.parseDouble(datosLineaTot[1]);
                                           //System.out.println(linea);
                                            linea = br.readLine();
                                            linea = br.readLine();
                                            datosLineaTot = linea.replaceAll(" ", "").split("=");
                                            double ivaFact = Double.parseDouble(datosLineaTot[1]);
                                           //System.out.println(linea);
                                            linea = br.readLine();
                                            datosLineaTot = linea.replaceAll(" ", "").split("=");

                                            double abonoFact = 0;
                                            double totalFact = 0;

                                            try {
                                                if (datosLineaTot[0].equals("Abonos")) {
                                                   //System.out.println(linea);
                                                    if (datosLineaTot.length == 1) {
                                                        abonoFact = 0;
                                                    } else {
                                                        abonoFact = Double.parseDouble(datosLineaTot[1]);
                                                    }


                                                    linea = br.readLine();
                                                    datosLineaTot = linea.replaceAll(" ", "").split("=");
                                                   //System.out.println(linea);
                                                    totalFact = Double.parseDouble(datosLineaTot[1]);




                                                }


                                            } catch (Exception es) {
                                            }

                                            try {
                                               //System.out.println(linea);
                                                totalFact = Double.valueOf(linea.split("=")[1]);

                                            } catch (Exception e) {
                                            }


                                            //Realizo la Insercion:
                                            boolean exitoCabecera = false;
                                            boolean exitoDetalles = false;
                                            //Inicio la Transaccion de Insercion de Facturas:
                                            a.conexion.consultarBase("START TRANSACTION;");
                                            //Realizo la Insercion de Datos de la cabecera:
//                                            NumFact = NumFact + 1682;
                                            String hora=new java.sql.Time(System.currentTimeMillis()).toString();
                                            exitoCabecera = a.conexion.insertarDatosR("insert into pedido values(" + NumFact + ",'" + codigoUsuario + "',"
                                                    + "'direccion','" + fecha + "','Cuenca','Ecuador','Azuay','888888',"
                                                    + "'vendedor'," + totalFact + "," + ivaFact + ","
                                                    + "" + descuentoFact + "," + subtFact + ",'A',null,'','F','1',"
                                                    + "'6',101010101,0,'','"+hora+"')");

                                            //Realizo la Insercion de Datos del detalle:
                                            int contador = 0;
                                            for (int n = 0; n < vetorDetalleProductos.size(); n++) {
                                                String detalleVect[] = vetorDetalleProductos.get(n).split("#");

                                                boolean act = a.conexion.insertarDatosR("insert into dtl_pedido values(" + NumFact + ",'" + detalleVect[0]/*Codigo*/ + "',"
                                                        + "" + detalleVect[2]/*Cantidad*/ + "," + detalleVect[4]/*Subtotal*/ + ",'F','" + detalleVect[1] + "'," + detalleVect[3] + ")");
                                                if (act) {
                                                    contador++;
                                                }
                                            }
                                            if (vetorDetalleProductos.size() == contador) {
                                                exitoDetalles = true;
                                            }

                                            if (exitoCabecera && exitoDetalles) {
                                                //a.conexion.consultarBase("ROLLBACK;");
                                                a.conexion.consultarBase("COMMIT;");

                                            } else {
                                                a.conexion.consultarBase("ROLLBACK;");
                                            }



                                            break;

                                        }

                                    } catch (Exception ex) {
                                        // System.err.println(ex);
                                    }


                                    //Realizo las Inserciones:


                                }
                            }
                        }
                       //System.out.println("El numero de facturas encontradas:" + contadorFacturas + "  de un total de:" + contFacturasReales);
                    } catch (Exception e) {
                        e.printStackTrace();
                    } finally {
                        // En el finally cerramos el fichero, para asegurarnos
                        // que se cierra tanto si todo va bien como si salta 
                        // una excepcion.
                        try {
                            if (null != fr) {
                                fr.close();
                            }
                        } catch (Exception e2) {
                            e2.printStackTrace();
                        }
                    }




                }

            } else if (listOfFiles[i].isDirectory()) {
               //System.out.println("Directory " + listOfFiles[i].getName());
            }
        }
    }

    public int tomarMes(String mes) {
        int mesNum = 0;
        if (mes.toUpperCase().equals("ENERO")) {
            mesNum = 1;
        } else if (mes.toUpperCase().equals("FEBRERO")) {
            mesNum = 2;
        } else if (mes.toUpperCase().equals("MARZO")) {
            mesNum = 3;
        } else if (mes.toUpperCase().equals("ABRIL")) {
            mesNum = 4;
        } else if (mes.toUpperCase().equals("MAYO")) {
            mesNum = 5;
        } else if (mes.toUpperCase().equals("JUNIO")) {
            mesNum = 6;
        } else if (mes.toUpperCase().equals("JULIO")) {
            mesNum = 7;
        } else if (mes.toUpperCase().equals("AGOSTO")) {
            mesNum = 8;
        } else if (mes.toUpperCase().equals("SEPTIEMBRE")) {
            mesNum = 9;
        } else if (mes.toUpperCase().equals("OCTUBRE")) {
            mesNum = 10;
        } else if (mes.toUpperCase().equals("NOVIEMBRE")) {
            mesNum = 11;
        } else if (mes.toUpperCase().equals("DICIEMBRE")) {
            mesNum = 12;

        }




        return mesNum;
    }

    public void conectar() {


        //Tomando la base de datos de la computadora local y su base de datos se Actualizara la base del Internet
        String IPCliente = "localhost";// "174.136.152.21";
        String nombre = "root";//"daniel1";
        String password = "rosabarre1320";
        String dbcliente = "bdmultiadmin";
        String puerto = "3306";

        conexion = new Conexion();
        //Realizo la conexion a la base de datos cliente:
        boolean exito = conexion.conectarBase(nombre, password, puerto, dbcliente, IPCliente);
        if (!exito) {
           //System.out.println("No pudo establecer la conexion primera");
        } else {
        }



    }
}